#ifndef __MCP23S08_H__
#define __MCP23S08_H__
#include "main.h"


#if 1 
  #define MCP23S08_DEBUG(format, args...) ESP_LOGW("[MCP23S08]- "," %s:%d\r\n",__FILE__, __LINE__);printf(format, ## args );
#else
  #define MCP23S08_DEBUG(format, args...) ;
#endif

#define MCP23S08_ADDR   0X40
#define MCP23S08_WRITE  0X00
#define MCP23S08_READ   0X01

#define MCP23S08_IODIR    0X00//方向寄存器1=输入0=输出
#define MCP23S08_IPOL     0X01//输入极性1=与实际电平相反0=相同
#define MCP23S08_GPINTEN  0X02//电平变化中断引脚 1=允许0=不允许
#define MCP23S08_DEFVAL   0X03//默认值寄存器
#define MCP23S08_INTCON   0X04//电平变化中断控制寄存器
#define MCP23S08_IOCON    0X05//IO扩展配置寄存器
#define MCP23S08_GPPU     0X06//上拉电阻寄存器 1=上拉使能 0=上拉失能
#define MCP23S08_INTF     0X07//中断标志寄存器 1=引脚导致了中断0=没有中断
#define MCP23S08_INTCAP   0X08//（只读）端口寄存器中断捕获值
#define MCP23S08_GPIO     0X09//通用IO端口寄存器 1=输出高0=输出低
#define MCP23S08_OLAT     0X0A//输出锁存寄存器  1=输出高0=输出低



#define MCP23S08_CS      GPIO_NUM_21    

#define MCP23S08_CS_Clr()    gpio_set_level(MCP23S08_CS, 0)
#define MCP23S08_CS_Set()    gpio_set_level(MCP23S08_CS, 1)

esp_err_t MCP23S08_init(void);
void  MCP23S08_test_task(void *pvParameter);


uint8_t MCP23S08_Set_GPIOs(uint8_t gpios);
uint8_t MCP23S08_Get_GPIOs(void);
uint8_t MCP23S08_Set_Out(uint8_t gpios);

#endif